<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,IE=9,chrome=1"><meta name="generator" content="MATLAB 2021a"><title>Atomically resolve a metabolic reconstruction</title><style type="text/css">.rtcContent { padding: 30px; } .S0 { margin: 3px 10px 5px 4px; padding: 0px; line-height: 28.8px; min-height: 0px; white-space: pre-wrap; color: rgb(213, 80, 0); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 24px; font-weight: normal; text-align: left;  }
.S1 { margin: 20px 10px 5px 4px; padding: 0px; line-height: 20px; min-height: 0px; white-space: pre-wrap; color: rgb(60, 60, 60); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: bold; text-align: left;  }
.S2 { margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(0, 0, 0); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: normal; text-align: left;  }
.S3 { margin: 10px 10px 5px 4px; padding: 0px; line-height: 18px; min-height: 0px; white-space: pre-wrap; color: rgb(60, 60, 60); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 15px; font-weight: bold; text-align: left;  }
.S4 { margin: 3px 10px 5px 4px; padding: 0px; line-height: 20px; min-height: 0px; white-space: pre-wrap; color: rgb(60, 60, 60); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 20px; font-weight: bold; text-align: left;  }
.S5 { margin: 2px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(0, 0, 0); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: normal; text-align: center;  }
.CodeBlock { background-color: #F7F7F7; margin: 10px 0 10px 0;}
.S6 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 1px solid rgb(233, 233, 233); border-bottom: 0px none rgb(0, 0, 0); border-radius: 4px 4px 0px 0px; padding: 6px 45px 0px 13px; line-height: 17.234px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px;  }
.S7 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 0px none rgb(0, 0, 0); border-bottom: 0px none rgb(0, 0, 0); border-radius: 0px; padding: 0px 45px 0px 13px; line-height: 17.234px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px;  }
.S8 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 0px none rgb(0, 0, 0); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 0px 0px 4px 4px; padding: 0px 45px 4px 13px; line-height: 17.234px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px;  }
.S9 { margin: 10px 10px 9px 4px; padding: 0px; line-height: 21px; min-height: 0px; white-space: pre-wrap; color: rgb(0, 0, 0); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 14px; font-weight: normal; text-align: left;  }
.S10 { margin: 15px 10px 5px 4px; padding: 0px; line-height: 18px; min-height: 0px; white-space: pre-wrap; color: rgb(60, 60, 60); font-family: Helvetica, Arial, sans-serif; font-style: normal; font-size: 17px; font-weight: bold; text-align: left;  }
.S11 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 1px solid rgb(233, 233, 233); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 4px; padding: 6px 45px 4px 13px; line-height: 17.234px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px;  }
.S12 { margin: 10px 0px 20px; padding-left: 0px; font-family: Helvetica, Arial, sans-serif; font-size: 14px;  }
.S13 { margin-left: 56px; line-height: 21px; min-height: 0px; text-align: left; white-space: pre-wrap;  }
.S14 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 0px none rgb(0, 0, 0); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 0px; padding: 0px 45px 4px 13px; line-height: 17.234px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px;  }
.S15 { color: rgb(64, 64, 64); padding: 10px 0px 6px 17px; background: rgb(255, 255, 255) none repeat scroll 0% 0% / auto padding-box border-box; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; overflow-x: hidden; line-height: 17.234px;  }
/* Styling that is common to warnings and errors is in diagnosticOutput.css */.embeddedOutputsErrorElement {    min-height: 18px;    max-height: 250px;    overflow: auto;}
.embeddedOutputsErrorElement.inlineElement {}
.embeddedOutputsErrorElement.rightPaneElement {}
/* Styling that is common to warnings and errors is in diagnosticOutput.css */.embeddedOutputsWarningElement{    min-height: 18px;    max-height: 250px;    overflow: auto;}
.embeddedOutputsWarningElement.inlineElement {}
.embeddedOutputsWarningElement.rightPaneElement {}
/* Copyright 2015-2019 The MathWorks, Inc. *//* In this file, styles are not scoped to rtcContainer since they could be in the Dojo Tooltip */.diagnosticMessage-wrapper {    font-family: Menlo, Monaco, Consolas, "Courier New", monospace;    font-size: 12px;}
.diagnosticMessage-wrapper.diagnosticMessage-warningType {    color: rgb(255,100,0);}
.diagnosticMessage-wrapper.diagnosticMessage-warningType a {    color: rgb(255,100,0);    text-decoration: underline;}
.diagnosticMessage-wrapper.diagnosticMessage-errorType {    color: rgb(230,0,0);}
.diagnosticMessage-wrapper.diagnosticMessage-errorType a {    color: rgb(230,0,0);    text-decoration: underline;}
.diagnosticMessage-wrapper .diagnosticMessage-messagePart,.diagnosticMessage-wrapper .diagnosticMessage-causePart {    white-space: pre-wrap;}
.diagnosticMessage-wrapper .diagnosticMessage-stackPart {    white-space: pre;}
.embeddedOutputsTextElement,.embeddedOutputsVariableStringElement {    white-space: pre;    word-wrap:  initial;    min-height: 18px;    max-height: 250px;    overflow: auto;}
.textElement,.rtcDataTipElement .textElement {    padding-top: 3px;}
.embeddedOutputsTextElement.inlineElement,.embeddedOutputsVariableStringElement.inlineElement {}
.inlineElement .textElement {}
.embeddedOutputsTextElement.rightPaneElement,.embeddedOutputsVariableStringElement.rightPaneElement {    min-height: 16px;}
.rightPaneElement .textElement {    padding-top: 2px;    padding-left: 9px;}
.embeddedOutputsVariableTableElement .ClientViewDiv  table tr {  height: 22px;  white-space: nowrap;}
.embeddedOutputsVariableTableElement .ClientViewDiv  table tr td,.embeddedOutputsVariableTableElement .ClientViewDiv  table tr th {  background-color:white;  text-overflow: ellipsis;  font-family: 'Arial', sans-serif;  font-size: 12px;  overflow : hidden;}
.embeddedOutputsVariableTableElement .ClientViewDiv  table tr span {  text-overflow: ellipsis;  padding: 3px;}
.embeddedOutputsVariableTableElement .ClientViewDiv  table tr th {    color: rgba(0,0,0,0.5);  padding: 3px;  font-size: 9px;}
.S16 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 1px solid rgb(233, 233, 233); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 0px 0px 4px 4px; padding: 6px 45px 4px 13px; line-height: 17.234px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px;  }
.S17 { border-left: 1px solid rgb(233, 233, 233); border-right: 1px solid rgb(233, 233, 233); border-top: 1px solid rgb(233, 233, 233); border-bottom: 1px solid rgb(233, 233, 233); border-radius: 4px 4px 0px 0px; padding: 6px 45px 4px 13px; line-height: 17.234px; min-height: 18px; white-space: nowrap; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px;  }</style></head><body><div class = rtcContent><h1  class = 'S0'><span>Atomically resolve a metabolic reconstruction</span></h1><h2  class = 'S1'><span>Author: German Preciat, Analytical BioSciences, Leiden University</span></h2><h2  class = 'S1'><span>INTRODUCTION</span></h2><div  class = 'S2'><span>Genome-scale metabolic network reconstructions have become a relevant tool in modern biology to study the metabolic pathways of biological systems</span><span> </span><span style=' font-style: italic;'>in silico</span><span>. However, a more detailed representation at the underlying level of atom mappings opens the possibility for a broader range of biological, biomedical and biotechnological applications than with stoichiometry alone.</span></div><div  class = 'S2'><span>This tutorial will demonstrate how to use the chimoinformatic tools in the COBRA Toolbox. The tutorial is divided into three sections: first, the chimoinformatic data of the metabolites in a COBRA model is processed generating metabolite structures in various chemoinfomatic formats; second, the atoms of their reactions are mapped; and finally, all of the tools demonstrated are used to generate a standardized chemoinformatic database specific to the COBRA model. The chemoinformatic database will be generated using information from the ecoliCore model.</span></div><h2  class = 'S1'><span>MATERIALS</span></h2><h4  class = 'S3'><span>Open Babel</span></h4><div  class = 'S2'><span>To convert molecular structures, open babel must be installed. To install it, follow the steps below.</span></div><div  class = 'S2'><span>On Windows, download the </span><a href = "https://github.com/openbabel/openbabel/releases/download/openbabel-3-1-1/OpenBabel-3.1.1.exe"><span>OpenBabel</span></a><span> installation and follow the instructions.</span></div><div  class = 'S2'><span>On </span><span style=' font-style: italic;'>macOS</span><span>, run the following command in the Terminal:</span></div><div  class = 'S2'><span style=' font-family: monospace;'>$ brew install open-babel</span></div><h4  class = 'S3'><span>CXCALC</span></h4><div  class = 'S2'><span>The CXCALC tools are used to adjust the pH and create images of the metabolic structures. To install CXCALC download </span><a href = "https://chemaxon.com/products/marvin/download"><span>MarvinSuite</span></a><span> and follow the instructions.</span></div><h4  class = 'S3'><span>JAVA</span></h4><div  class = 'S2'><span>To atom map reactions it is required to have Java version 8. Follow the instruction in </span><a href = "https://www.openlogic.com/openjdk-downloads"><span>https://www.openlogic.com/openjdk-downloads</span></a><span>. </span></div><div  class = 'S2'><span>On</span><span> </span><span style=' font-style: italic;'>macOS</span><span>, please make sure that you run the following commands in the Terminal before continuing with this tutorial:</span></div><div  class = 'S2'><span style=' font-family: monospace;'>$ /usr/bin/ruby -e "$(curl -fsSL</span><span style=' font-family: monospace;'> </span><a href = "https://raw.githubusercontent.com/Homebrew/install/master/install"><span style=' font-family: monospace;'>https://raw.githubusercontent.com/Homebrew/install/master/install</span></a><span style=' font-family: monospace;'>)"</span></div><div  class = 'S2'><span style=' font-family: monospace;'>$ brew install coreutils</span></div><h4  class = 'S3'><span style=' font-family: monospace;'>PATH</span></h4><div  class = 'S2'><span style=' font-family: monospace;'>On </span><span style=' font-style: italic; font-family: monospace;'>Linux</span><span>, please make sure that Java, OpenBabel and CXCALC directories are included. To do this, run the following commands:</span></div><div  class = 'S2'><span style=' font-family: monospace;'>$ export PATH=$PATH:/usr/local/bin</span><span> (default location of OpenBabel)</span></div><div  class = 'S2'><span style=' font-family: monospace;'>$ export PATH=$PATH:/opt/opt/chemaxon/jchemsuite/bin/</span><span> (default location of CXCALC)</span></div><div  class = 'S2'><span style=' font-family: monospace;'>$ export PATH=$PATH:/usr/java/jre1.8.0_131/bin/</span><span> (default installation of Java)</span></div><div  class = 'S2'><span style=' font-family: monospace;'>On Windows</span><span>:</span></div><div  class = 'S2'><span style=' font-family: monospace;'>$ set path=%path%;C:\Program Files (x86)\OpenBabel-3.1.1</span><span> (default location of OpenBabel)</span></div><div  class = 'S2'><span style=' font-family: monospace;'>$ set path=%path%;C:\Program Files\ChemAxon\MarvinSuite\bin</span><span> (default location of CXCALC)</span></div><div  class = 'S2'><span>Also, in order to standardise the chemical reaction format, it is required to have CXCALC with its respective license.</span></div><h2  class = 'S4'><span>Metabolites</span></h2><div  class = 'S2'><span>Metabolite structures are represented in a variety of chemoinformatic formats, including 1) Metabolite chemical tables (MDL MOL) that list all of the atoms in a molecule, as well as their coordinates and bonds</span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;inline&quot;&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-5px"><img src="" width="11" height="19" /></span><span>; 2) The simplified molecular-input line-entry system (SMILES), which uses a string of ASCII characters to describe the structure of a molecule</span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;inline&quot;&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-5px"><img src="" width="11" height="19" /></span><span>; or 3) The International Chemical Identifier (InChI) developed by the IUPAC, provides a standard representation for encoding molecular structures using multiple layers to describe a metabolite structure</span><span texencoding="{\;}^3" style="vertical-align:-5px"><img src="" width="12" height="19" /></span><span> (see Figure 1). Additionally, different chemical databases assing a particular identifier to represent the metabolite structures as the Virtual Metabolic Human database </span><span>(</span><span style=' font-weight: bold;'>VMH</span><span>)</span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;inline&quot;&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;4&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-5px"><img src="" width="11" height="19" /></span><span>, the Human Metabolome Database </span><span>(</span><span style=' font-weight: bold;'>HMDB</span><span>)</span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;msup&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/math&gt;" style="vertical-align:-5px"><img src="" width="11" height="19" /></span><span>,</span><span> </span><span style=' font-weight: bold;'>PubChem</span><span> database</span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;inline&quot;&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;6&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-5px"><img src="" width="11" height="19" /></span><span>, the Kyoto Encyclopedia of Genes and Genomes</span><span>(</span><span style=' font-weight: bold;'>KEEG</span><span>)</span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;inline&quot;&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;7&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-5px"><img src="" width="11" height="19" /></span><span>, and the Chemical Entities of Biological Interest </span><span>(</span><span style=' font-weight: bold;'>ChEBI</span><span>)</span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;inline&quot;&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;8&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-5px"><img src="" width="11" height="19" /></span><span>. </span></div><div  class = 'S5'><img class = "imageNode" src = "" width = "752" height = "537" alt = "" style = "vertical-align: baseline"></img></div><div  class = 'S5'><span>Figure 1. L-alaninate molecule represented by a hydrogen-suppressed molecular graph (implicit hydrogens). The main branch of the molecule can be seen in green; the additional branches can be seen in brown, pink and turquoise. The stereochemistry of the molecule is highlighted in blue, the double bond with dark green and the charges are highlighted in light brown. The same colours are used to indicate where this information is represented in the different chemoinformatic formats. The InChI is divided into layers, each of which begins with a lowercase letter, except for Layers 1 and 2. Layer 1 indicates if the InChI is standardised, Layer 2 the chemical formula in a neutral state, Layer 3 the connectivity between the atoms (ignoring hydrogen atoms), Layer 4 the connectivity of hydrogen atoms, Layer 5 the charge of the molecule and Layer 6 the stereochemistry. Additional layers can be added, but they cannot be represented with a standard InChI.</span></div><div  class = 'S2'><span>First we clean the workspace and define the model that will be used for conserved moiety decomposition.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre"><span >clear</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(2, 128, 9);">%modelName = 'ecoli';</span></span></div></div><div class="inlineWrapper"><div  class = 'S8'><span style="white-space: pre"><span >modelName = </span><span style="color: rgb(170, 4, 249);">'DAS'</span><span >;</span></span></div></div></div><div  class = 'S9'><span>Setup the paths and load the model.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre"><span >projectDir = strrep(which(</span><span style="color: rgb(170, 4, 249);">'tutorial_atomicallyResolveReconstruction'</span><span >),</span><span style="color: rgb(170, 4, 249);">'/tutorial_atomicallyResolveReconstruction.mlx'</span><span >,</span><span style="color: rgb(170, 4, 249);">''</span><span >);</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >resultsDir = [projectDir filesep </span><span style="color: rgb(170, 4, 249);">'results' </span><span >filesep modelName </span><span style="color: rgb(170, 4, 249);">'_chemoinformatics' </span><span >filesep];</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">switch </span><span >modelName</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    </span><span style="color: rgb(14, 0, 255);">case </span><span style="color: rgb(170, 4, 249);">'DAS'</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >        tutorialdir = fileparts(which(</span><span style="color: rgb(170, 4, 249);">'tutorial_atomicallyResolveReconstruction.mlx'</span><span >));</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >        model = readCbModel([tutorialdir filesep </span><span style="color: rgb(170, 4, 249);">'data' </span><span >filesep </span><span style="color: rgb(170, 4, 249);">'subDas.mat'</span><span >]); </span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    </span><span style="color: rgb(14, 0, 255);">case </span><span style="color: rgb(170, 4, 249);">'ecoli'</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >        load </span><span style="color: rgb(170, 4, 249);">ecoli_core_model.mat</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >        model.mets = regexprep(model.mets, </span><span style="color: rgb(170, 4, 249);">'\-'</span><span >, </span><span style="color: rgb(170, 4, 249);">'\_'</span><span >);</span></span></div></div><div class="inlineWrapper"><div  class = 'S8'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div></div></div><div  class = 'S9'><span>Check Open Babel and CXCALC installation</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre"><span >[oBabelInstalled, ~] = system(</span><span style="color: rgb(170, 4, 249);">'obabel'</span><span >);</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">if </span><span >oBabelInstalled == 127</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    oBabelInstalled = 0;</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >[cxcalcInstalled, ~] = system(</span><span style="color: rgb(170, 4, 249);">'cxcalc'</span><span >);</span></span></div></div><div class="inlineWrapper"><div  class = 'S8'><span style="white-space: pre"><span >cxcalcInstalled = ~cxcalcInstalled;</span></span></div></div></div><h3  class = 'S10'><span>Add metabolite information</span></h3><div  class = 'S2'><span>The </span><span style=' font-family: monospace;'>addMetInfoInCBmodel</span><span> function will be used to add the identifiers. The chemoinformatic data is obtained from an external file and is added to the ecoliCore model. The chemoinformatic information includes SMILES, InChIs, or different database identifiers.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre"><span >dataFile = which(</span><span style="color: rgb(170, 4, 249);">'tutorial_atomicallyResolveReconstruction.mlx'</span><span >);</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >inputData = regexprep(dataFile, </span><span style="color: rgb(170, 4, 249);">'tutorial_atomicallyResolveReconstruction.mlx'</span><span >, </span><span style="color: rgb(170, 4, 249);">'metaboliteIds.xlsx'</span><span >);</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >expectedResults = regexprep(dataFile, </span><span style="color: rgb(170, 4, 249);">'tutorial_atomicallyResolveReconstruction.mlx'</span><span >, </span><span style="color: rgb(170, 4, 249);">'expectedResults'</span><span >);</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >replace = false;</span></span></div></div><div class="inlineWrapper"><div  class = 'S8'><span style="white-space: pre"><span >[model, hasEffect] = addMetInfoInCBmodel(model, inputData, replace);</span></span></div></div></div><h3  class = 'S10'><span>Download metabolites from model identifiers</span></h3><div  class = 'S2'><span>The </span><span style=' font-family: monospace;'>obtainMetStructures</span><span> function is used to obtain MDL MOL files from different databases, including HMDB</span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;inline&quot;&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;5&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-5px"><img src="" width="11" height="19" /></span><span>, PubChem</span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;inline&quot;&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;6&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-5px"><img src="" width="11" height="19" /></span><span>, KEEG</span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;inline&quot;&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;7&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-5px"><img src="" width="11" height="19" /></span><span> and ChEBI</span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;inline&quot;&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;8&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-5px"><img src="" width="11" height="19" /></span><span>. Alternatively, the function can be used to convert the InChI strings or SMILES in the model to MDL MOL files. A COBRA model with identifiers is required to run the function.</span></div><div  class = 'S2'><span>The optional variables are:</span></div><div  class = 'S2'><span>The variable |mets| contains a list of metabolites to be download (Default: All). To obtain the metabolite structure of glucose, we use the VMH id.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">switch </span><span >modelName</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    </span><span style="color: rgb(14, 0, 255);">case </span><span style="color: rgb(170, 4, 249);">'DAS'</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >        mets = {</span><span style="color: rgb(170, 4, 249);">'34dhphe'</span><span >; </span><span style="color: rgb(170, 4, 249);">'dopa'</span><span >; </span><span style="color: rgb(170, 4, 249);">'co2'</span><span >};</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    </span><span style="color: rgb(14, 0, 255);">case </span><span style="color: rgb(170, 4, 249);">'ecoli'</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >        mets = {</span><span style="color: rgb(170, 4, 249);">'2pg'</span><span >; </span><span style="color: rgb(170, 4, 249);">'h2o'</span><span >; </span><span style="color: rgb(170, 4, 249);">'pep'</span><span >; </span><span style="color: rgb(170, 4, 249);">'fdp'</span><span >; </span><span style="color: rgb(170, 4, 249);">'f6p'</span><span >; </span><span style="color: rgb(170, 4, 249);">'pi'</span><span >};</span></span></div></div><div class="inlineWrapper"><div  class = 'S8'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div></div></div><div  class = 'S9'><span style=' font-family: monospace;'>outputDir</span><span>: Path to the directory that will contain the MOL files (default: current directory).</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre"><span >outputDir = resultsDir;</span></span></div></div></div><div  class = 'S9'><span style=' font-family: monospace;'>sources</span><span>, is an array indicating the source of preference (default: all the sources with ID)</span></div><ol  class = 'S12'><li  class = 'S13'><span>InChI (requires openBabel)</span></li><li  class = 'S13'><span>Smiles (requires openBabel)</span></li><li  class = 'S13'><span>KEGG </span><span>(</span><a href = "https://www.genome.jp/"><span>https://www.genome.jp/</span></a><span>)</span></li><li  class = 'S13'><span>HMDB </span><span>(</span><a href = "https://hmdb.ca/"><span>https://hmdb.ca/</span></a><span>)</span></li><li  class = 'S13'><span>PubChem </span><span>(</span><a href = "https://pubchem.ncbi.nlm.nih.gov/"><span>https://pubchem.ncbi.nlm.nih.gov/</span></a><span>)</span></li><li  class = 'S13'><span>CHEBI </span><span>(</span><a href = "https://www.ebi.ac.uk/"><span>https://www.ebi.ac.uk/</span></a><span>)</span></li><li  class = 'S13'><span>DrugBank (</span><a href = "https://go.drugbank.com/"><span>https://go.drugbank.com/</span></a><span>)</span></li><li  class = 'S13'><span>LipidMass (</span><a href = "https://www.lipidmaps.org/"><span>https://www.lipidmaps.org/</span></a><span>)</span></li></ol><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre"><span >sources = {</span><span style="color: rgb(170, 4, 249);">'inchi'</span><span >; </span><span style="color: rgb(170, 4, 249);">'smiles'</span><span >; </span><span style="color: rgb(170, 4, 249);">'kegg'</span><span >; </span><span style="color: rgb(170, 4, 249);">'hmdb'</span><span >; </span><span style="color: rgb(170, 4, 249);">'pubchem'</span><span >; </span><span style="color: rgb(170, 4, 249);">'chebi'</span><span >};</span></span></div></div></div><div  class = 'S9'><span>Run the function</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">if </span><span >oBabelInstalled</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    molCollectionReport = obtainMetStructures(model, mets, outputDir, sources);</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">else</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    load([expectedResults filesep </span><span style="color: rgb(170, 4, 249);">'molCollectionReport.mat'</span><span >])</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S14'><span style="white-space: pre"><span >disp(molCollectionReport.databaseCoverage)</span></span></div><div  class = 'S15'><div class="inlineElement eoOutputWrapper embeddedOutputsTextElement scrollableOutput" uid="90D077A9" data-testid="output_0" data-width="420" data-height="129" data-hashorizontaloverflow="true" style="width: 450px; max-height: 261px; white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="textElement" style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">      <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">sources</strong>      <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">coverage</strong>    <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">metsWithStructure</strong>    <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">metsWithoutStructure</strong>
    <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">___________</strong>    <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">________</strong>    <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">_________________</strong>    <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">____________________</strong>

    {'chebi'  }      100               3                     0          
    {'hmdb'   }      100               3                     0          
    {'inchi'  }      100               3                     0          
    {'kegg'   }      100               3                     0          
    {'pubchem'}      100               3                     0          
    {'smiles' }      100               3                     0          </div></div></div></div></div><h3  class = 'S10'><span>Convert metabolites</span></h3><div  class = 'S2'><span>Open Babel</span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;inline&quot;&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;9&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-5px"><img src="" width="11" height="19" /></span><span> is a chemical toolbox designed to translate the different chemical data languages. It is possible to convert between chemical formats such as MDL MOL files to InChI. This function </span><span style=' font-family: monospace;'>openBabelConverter</span><span> converts chemoformatic formats using OpenBabel. It requires having OpenBabel installed. </span></div><div  class = 'S2'><span>The function requires the original chemoinformatic structure (</span><span style=' font-family: monospace;'>origFormat</span><span>) and the output format (</span><span style=' font-family: monospace;'>outputFormat</span><span>). The formats supported are SMILES, MD MOL, InChI, InChIKey, rxn and rinchi. Furthermore, if the optional variable </span><span style=' font-family: monospace;'>saveFileDir</span><span> is set, the new format will be saved with the name specified in the variable.</span></div><div  class = 'S2'><span>All of the downloaded metabolite structures are converted to an InChI as follows.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">switch </span><span >modelName</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    </span><span style="color: rgb(14, 0, 255);">case </span><span style="color: rgb(170, 4, 249);">'DAS'</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >        met = </span><span style="color: rgb(170, 4, 249);">'dopa'</span><span >;</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    </span><span style="color: rgb(14, 0, 255);">case </span><span style="color: rgb(170, 4, 249);">'ecoli'</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >        met = </span><span style="color: rgb(170, 4, 249);">'f6p'</span><span >;</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">if </span><span >oBabelInstalled</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    [inchis, smiles] = deal(cell(size(mets)));</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    </span><span style="color: rgb(14, 0, 255);">for </span><span >i = 1:length(sources)</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >        metaboliteDir = [outputDir </span><span style="color: rgb(170, 4, 249);">'metabolites' </span><span >filesep sources{i} filesep];</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >        </span><span style="color: rgb(14, 0, 255);">if </span><span >isfile([metaboliteDir met </span><span style="color: rgb(170, 4, 249);">'.mol'</span><span >])</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >            inchis{i, 1} = openBabelConverter([metaboliteDir met </span><span style="color: rgb(170, 4, 249);">'.mol'</span><span >], </span><span style="color: rgb(170, 4, 249);">'inchi'</span><span >);</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >            smiles{i, 1} = openBabelConverter(inchis{i, 1}, </span><span style="color: rgb(170, 4, 249);">'smiles'</span><span >);</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >        </span><span style="color: rgb(14, 0, 255);">end</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    </span><span style="color: rgb(14, 0, 255);">end</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">else</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    load([expectedResults filesep </span><span style="color: rgb(170, 4, 249);">'inchisSmiles.mat'</span><span >])</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S14'><span style="white-space: pre"><span >table(sources, inchis, smiles)</span></span></div><div  class = 'S15'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableTableElement" uid="BFF753E2" data-testid="output_1" style="width: 450px;"><div class="ClientDocument veSpecifier table" id="variableeditor_client_Document_0" widgetid="variableeditor_client_Document_0" tabindex="0"><div class="summaryBar" style="font-size: 12px; font-family: Consolas, Inconsolata, Menlo, monospace;"><span>ans = </span><span style="color: rgb(179, 179, 179); font-style: normal;">6×3 table </span></div><div id="variableeditor_TableViewModel_0" widgetid="variableeditor_TableViewModel_0" class="table ClientViewDiv hasSummaryBar" data-viewid="__1"><table cellspacing="0" style="border-spacing: 0px; border-width: 0px 1px 0px 0px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><thead><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>&nbsp;</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 90px; min-width: 90px; max-width: 90px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>sources</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>inchis</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>smiles</span></th></tr></thead><tbody><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>1</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 90px; min-width: 90px; max-width: 90px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'inchi'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'InChI=1S/C8H11NO2/c9-4-3-6-1-2-7(10)8(11)5-6/h1-2,5,10-11H,3-4,9H2/p+1'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'c1cc(c(cc1CC[NH3+])O)O'</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>2</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 90px; min-width: 90px; max-width: 90px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'smiles'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'InChI=1S/C8H11NO2/c9-4-3-6-1-2-7(10)8(11)5-6/h1-2,5,10-11H,3-4,9H2/p+1'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'c1cc(c(cc1CC[NH3+])O)O'</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>3</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 90px; min-width: 90px; max-width: 90px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'kegg'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'InChI=1S/C8H11NO2/c9-4-3-6-1-2-7(10)8(11)5-6/h1-2,5,10-11H,3-4,9H2'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'c1cc(c(cc1CCN)O)O'</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>4</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 90px; min-width: 90px; max-width: 90px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'hmdb'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'InChI=1S/C8H11NO2/c9-4-3-6-1-2-7(10)8(11)5-6/h1-2,5,10-11H,3-4,9H2'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'c1cc(c(cc1CCN)O)O'</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>5</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 90px; min-width: 90px; max-width: 90px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'pubchem'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'InChI=1S/C8H11NO2/c9-4-3-6-1-2-7(10)8(11)5-6/h1-2,5,10-11H,3-4,9H2'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'c1cc(c(cc1CCN)O)O'</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>6</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 90px; min-width: 90px; max-width: 90px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'chebi'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'InChI=1S/C8H11NO2/c9-4-3-6-1-2-7(10)8(11)5-6/h1-2,5,10-11H,3-4,9H2'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'c1cc(c(cc1CCN)O)O'</span></td></tr></tbody></table></div></div></div></div></div></div><h3  class = 'S10'><span>InChI comparison</span></h3><div  class = 'S2'><span>With the function </span><span style=' font-family: monospace;'>compareInchis</span><span>, each InChI string is given a score based on its similarity to the chemical formula and charge of the metabolite in the model. Factors such as stereochemistry, if it is a standard inchi, and its similarity to the other inchis are also considered. The InChI with the highest score is the identifier considered as more consistent with the model.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre"><span >comparisonTable = compareInchis(model, inchis, met);</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S14'><span style="white-space: pre"><span >display(comparisonTable)</span></span></div><div  class = 'S15'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableTableElement" uid="B3B4EE77" data-testid="output_2" style="width: 450px;"><div class="ClientDocument veSpecifier table" id="variableeditor_client_Document_1" widgetid="variableeditor_client_Document_1" tabindex="0"><div class="summaryBar" style="font-size: 12px; font-family: Consolas, Inconsolata, Menlo, monospace;"><span>comparisonTable = </span><span style="color: rgb(179, 179, 179); font-style: normal;">6×15 table </span></div><div id="variableeditor_TableViewModel_1" widgetid="variableeditor_TableViewModel_1" class="table ClientViewDiv hasSummaryBar" data-viewid="__1"><table cellspacing="0" style="border-spacing: 0px; border-width: 0px 1px 0px 0px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><thead><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>&nbsp;</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>scores</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>rGroup</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>InChI</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 112px; min-width: 112px; max-width: 112px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>metFormula</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 135px; min-width: 135px; max-width: 135px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>formulaOkBool</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>netCharge</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 127px; min-width: 127px; max-width: 127px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>chargeOkBool</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 209px; min-width: 209px; max-width: 209px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>stereochemicalSubLayers</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>standard</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 157px; min-width: 157px; max-width: 157px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>sourceSimilarity</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 179px; min-width: 179px; max-width: 179px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>mainLayerSimilarity</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 135px; min-width: 135px; max-width: 135px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>isotopicLayer</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>layers</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 179px; min-width: 179px; max-width: 179px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>inchiWithMoreLayers</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>mainLayer</span></th></tr></thead><tbody><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>1</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>14.3333</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'InChI=1S/C8H11NO2/c9-4-3-6-1-2-7(10)8(11)5-6/h1-2,5,10-11H,3-4,9H2/p+1'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 112px; min-width: 112px; max-width: 112px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"C8H11NO2"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 135px; min-width: 135px; max-width: 135px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 127px; min-width: 127px; max-width: 127px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 209px; min-width: 209px; max-width: 209px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 157px; min-width: 157px; max-width: 157px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0.3333</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 179px; min-width: 179px; max-width: 179px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 135px; min-width: 135px; max-width: 135px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>5</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 179px; min-width: 179px; max-width: 179px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"InChI=1S/C8H11NO2/c9-4-3-6-1-2-7(10)8(11)5-6/h1-2,5,10-11H,3-4,9H2"</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>2</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>14.3333</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'InChI=1S/C8H11NO2/c9-4-3-6-1-2-7(10)8(11)5-6/h1-2,5,10-11H,3-4,9H2/p+1'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 112px; min-width: 112px; max-width: 112px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"C8H11NO2"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 135px; min-width: 135px; max-width: 135px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 127px; min-width: 127px; max-width: 127px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 209px; min-width: 209px; max-width: 209px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 157px; min-width: 157px; max-width: 157px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0.3333</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 179px; min-width: 179px; max-width: 179px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 135px; min-width: 135px; max-width: 135px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>5</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 179px; min-width: 179px; max-width: 179px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"InChI=1S/C8H11NO2/c9-4-3-6-1-2-7(10)8(11)5-6/h1-2,5,10-11H,3-4,9H2"</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>3</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>12.6667</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'InChI=1S/C8H11NO2/c9-4-3-6-1-2-7(10)8(11)5-6/h1-2,5,10-11H,3-4,9H2'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 112px; min-width: 112px; max-width: 112px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"C8H11NO2"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 135px; min-width: 135px; max-width: 135px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 127px; min-width: 127px; max-width: 127px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 209px; min-width: 209px; max-width: 209px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 157px; min-width: 157px; max-width: 157px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0.6667</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 179px; min-width: 179px; max-width: 179px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 135px; min-width: 135px; max-width: 135px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>4</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 179px; min-width: 179px; max-width: 179px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"InChI=1S/C8H11NO2/c9-4-3-6-1-2-7(10)8(11)5-6/h1-2,5,10-11H,3-4,9H2"</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>4</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>12.6667</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'InChI=1S/C8H11NO2/c9-4-3-6-1-2-7(10)8(11)5-6/h1-2,5,10-11H,3-4,9H2'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 112px; min-width: 112px; max-width: 112px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"C8H11NO2"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 135px; min-width: 135px; max-width: 135px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 127px; min-width: 127px; max-width: 127px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 209px; min-width: 209px; max-width: 209px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 157px; min-width: 157px; max-width: 157px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0.6667</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 179px; min-width: 179px; max-width: 179px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 135px; min-width: 135px; max-width: 135px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>4</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 179px; min-width: 179px; max-width: 179px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"InChI=1S/C8H11NO2/c9-4-3-6-1-2-7(10)8(11)5-6/h1-2,5,10-11H,3-4,9H2"</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>5</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>12.6667</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'InChI=1S/C8H11NO2/c9-4-3-6-1-2-7(10)8(11)5-6/h1-2,5,10-11H,3-4,9H2'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 112px; min-width: 112px; max-width: 112px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"C8H11NO2"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 135px; min-width: 135px; max-width: 135px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 127px; min-width: 127px; max-width: 127px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 209px; min-width: 209px; max-width: 209px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 157px; min-width: 157px; max-width: 157px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0.6667</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 179px; min-width: 179px; max-width: 179px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 135px; min-width: 135px; max-width: 135px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>4</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 179px; min-width: 179px; max-width: 179px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"InChI=1S/C8H11NO2/c9-4-3-6-1-2-7(10)8(11)5-6/h1-2,5,10-11H,3-4,9H2"</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>6</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>12.6667</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'InChI=1S/C8H11NO2/c9-4-3-6-1-2-7(10)8(11)5-6/h1-2,5,10-11H,3-4,9H2'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 112px; min-width: 112px; max-width: 112px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"C8H11NO2"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 135px; min-width: 135px; max-width: 135px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 127px; min-width: 127px; max-width: 127px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 209px; min-width: 209px; max-width: 209px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 157px; min-width: 157px; max-width: 157px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0.6667</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 179px; min-width: 179px; max-width: 179px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 135px; min-width: 135px; max-width: 135px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>4</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 179px; min-width: 179px; max-width: 179px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"InChI=1S/C8H11NO2/c9-4-3-6-1-2-7(10)8(11)5-6/h1-2,5,10-11H,3-4,9H2"</span></td></tr></tbody></table></div></div></div></div></div></div><h3  class = 'S10'><span>Metabolite structure standardisation</span></h3><div  class = 'S2'><span>Standardize an MDL MOL file directory by representing the reaction using normal chemical graphs, hydrogen suppressed chemical graphs, and chemical graphs with protonated molecules. The function also updates the header with the standardization information. It makes use of CXCALC and OpenBabel.</span></div><div  class = 'S2'><span>Standardisation</span></div><ol  class = 'S12'><li  class = 'S13'><span>explicitH: Chemical graphs; </span></li><li  class = 'S13'><span>implicitH: Hydrogen suppressed chemical graph; </span></li><li  class = 'S13'><span>basic: Update the header. </span></li></ol><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">switch </span><span >modelName</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    </span><span style="color: rgb(14, 0, 255);">case </span><span style="color: rgb(170, 4, 249);">'DAS'</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >        standardisationApproach = </span><span style="color: rgb(170, 4, 249);">'implicitH'</span><span >;</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    </span><span style="color: rgb(14, 0, 255);">case </span><span style="color: rgb(170, 4, 249);">'ecoli'</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >        standardisationApproach = </span><span style="color: rgb(170, 4, 249);">'explicitH'</span><span >;</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">if </span><span >oBabelInstalled</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    inchiDir = [outputDir </span><span style="color: rgb(170, 4, 249);">'metabolites' </span><span >filesep </span><span style="color: rgb(170, 4, 249);">'inchi' </span><span >filesep];</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    metList = mets;</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    standardisedDir = [outputDir </span><span style="color: rgb(170, 4, 249);">'mets' </span><span >filesep];</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    standardisationReport = standardiseMolDatabase(inchiDir, metList, </span><span style="color: rgb(14, 0, 255);">...</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >        standardisedDir, standardisationApproach);</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">else</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    standardisedDir =[expectedResults filesep modelName </span><span style="color: rgb(170, 4, 249);">'_chemoinformatics' </span><span >filesep </span><span style="color: rgb(170, 4, 249);">'mets' </span><span >filesep];</span></span></div></div><div class="inlineWrapper"><div  class = 'S8'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div></div></div><h3  class = 'S10'><span>Metabolite structures</span></h3><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">if </span><span >cxcalcInstalled</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    imagesFolder = [standardisedDir </span><span style="color: rgb(170, 4, 249);">'images' </span><span >filesep];</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">else</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    imagesFolder = [expectedResults filesep modelName </span><span style="color: rgb(170, 4, 249);">'_chemoinformatics' </span><span >filesep </span><span style="color: rgb(170, 4, 249);">'mets' </span><span >filesep </span><span style="color: rgb(170, 4, 249);">'images' </span><span >filesep];</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >figure</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">for </span><span >i = 1:length(mets)</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    subplot(numel(mets)/3, 3, i)</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    imshow([imagesFolder mets{i} </span><span style="color: rgb(170, 4, 249);">'.jpeg'</span><span >])</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    title(mets{i})</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S14'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div><div  class = 'S15'><div class="inlineElement eoOutputWrapper embeddedOutputsFigure" uid="F6F8BFCE" data-testid="output_3" style="width: 450px;"><div class="figureElement"><img class="figureImage figureContainingNode" src="" style="width: 560px;"></div></div></div></div><div class="inlineWrapper"><div  class = 'S16'><span style="white-space: pre"><span >clearvars </span><span style="color: rgb(170, 4, 249);">-except model resultsDir modelName standardisedDir standardisationApproach oBabelInstalled cxcalcInstalled expectedResults</span></span></div></div></div><h2  class = 'S4'><span>Reactions</span></h2><div  class = 'S2'><span>A set of atom mappings represents the mechanism of each chemical reaction in a metabolic network, each of which relates an atom in a substrate metabolite to an atom of the same element in a product metabolite (Figure 1). To atom map reactions in a metabolic network reconstruction, one requires chemical structures in a data file format (SMILES, MDL MOL, InChIs), reaction stoichiometries, and an atom mapping algorithm.</span></div><div  class = 'S2'><span>A set of atom mappings represents the mechanism of each chemical reaction in a metabolic network, each of which relates an atom in a substrate metabolite to an atom of the same element in a product metabolite (Figure 1). To atom map reactions in a metabolic network reconstruction, one requires chemical structures in a data file format (SMILES, MDL MOL and InChIs), reaction stoichiometries, and an atom mapping algorithm.</span></div><div  class = 'S5'><img class = "imageNode" src = "" width = "585" height = "178" alt = "" style = "vertical-align: baseline"></img></div><div  class = 'S5'><span>Figure 1. Set of atom mappings for reaction L-Cysteine L-Homocysteine-Lyase (VMH ID: r0193).</span></div><div  class = 'S2'><span>Metabolite structures and reaction stoichiometries from the genome-scale reconstruction are used to generate reaction chemical tables containing information about the chemical reactions (MDL RXN). The metabolic reactions are atom mapped using the Reaction Decoder Tool (RDT) algorithm</span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;inline&quot;&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;11&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-5px"><img src="" width="16" height="19" /></span><span>, which was chosen after comparing the performance of published atom mapping algorithms</span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;inline&quot;&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;12&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-5px"><img src="" width="16" height="19" /></span><span>. Atom map metabolic reactions Atom mappings for the internal reactions of a metabolic network reconstruction are performed by the function</span><span> </span><span style=' font-family: monospace;'>obtainAtomMappingsRDT</span><span>. </span></div><div  class = 'S2'><span>For this section, the atom mappings are generated based on the molecular structures obtained and the ecoli core model. </span></div><div  class = 'S2'><span>The function</span><span> </span><span style=' font-family: monospace;'>obtainAtomMappingsRDT</span><span> generates 4 different directories containing: </span></div><ul  class = 'S12'><li  class = 'S13'><span>the atom mapped reactions in MDL RXN format (directory</span><span> </span><span style=' font-style: italic;'>atomMapped</span><span>), </span></li><li  class = 'S13'><span>the images of the atom mapped reactions (directory</span><span> </span><span style=' font-style: italic;'>images</span><span>), </span></li><li  class = 'S13'><span>additional data for the atom mapped reactions (SMILES, and product and reactant indexes) (directory</span><span> </span><span style=' font-style: italic;'>txtData</span><span>), and </span></li><li  class = 'S13'><span>the unmapped MDL RXN files (directory</span><span> </span><span style=' font-style: italic;'>rxnFiles</span><span>). </span></li></ul><div  class = 'S2'><span>The input variable</span><span> </span><span style=' font-family: monospace;'>outputDir</span><span> indicates the directory where the folders will be generated (by default the function assigns the current directory).</span></div><h2  class = 'S1'><span>Atom map a reaction</span></h2><div  class = 'S2'><span>The main inputs of the </span><span style=' font-family: monospace;'>obtainAtomMappingsRDT function </span><span>are a COBRA model structure and a directory containing the molecular structures in MDL MOL format. The variable </span><span style=' font-family: monospace;'>molFileDir </span><span>contains the path to the directory containing MOL files of the COBRA model. </span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre"><span >molFileDir = [standardisedDir </span><span style="color: rgb(170, 4, 249);">'molFiles' </span><span >filesep];</span></span></div></div></div><div  class = 'S9'><span>The variable </span><span style=' font-family: monospace;'>rxnDir</span><span> specifies the path to the directory containing the RXN files with atom mappings.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre"><span >rxnDir = [resultsDir </span><span style="color: rgb(170, 4, 249);">'rxns'</span><span >];</span></span></div></div></div><div  class = 'S9'><span>The input variable</span><span> </span><span style=' font-family: monospace;'>rxnsToAM</span><span> indicates the reactions that will be atom mapped. By default the function atom map all the internal reactions with all of its metabolites present in the metabolite database </span><span>(</span><span style=' font-family: monospace;'>molFileDir</span><span>).</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">switch </span><span >modelName</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    </span><span style="color: rgb(14, 0, 255);">case </span><span style="color: rgb(170, 4, 249);">'DAS'</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >        rxnsToAM = {</span><span style="color: rgb(170, 4, 249);">'R3'</span><span >};</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    </span><span style="color: rgb(14, 0, 255);">case </span><span style="color: rgb(170, 4, 249);">'ecoli'</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >        rxnsToAM = {</span><span style="color: rgb(170, 4, 249);">'ENO'</span><span >; </span><span style="color: rgb(170, 4, 249);">'FBP'</span><span >};</span></span></div></div><div class="inlineWrapper"><div  class = 'S8'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div></div></div><div  class = 'S9'><span>The variable</span><span> </span><span style=' font-family: monospace;'>hMapping</span><span>, indicates if the hydrogen atoms will be also atom mapped (Default:</span><span> </span><span style=' font-family: monospace;'>true</span><span>).</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre"><span >hMapping = true;</span></span></div></div></div><div  class = 'S9'><span>Finally, the variable</span><span> </span><span style=' font-family: monospace;'>onlyUnmapped</span><span> indicates if only the reaction files will be generated without atom mappings (Default:</span><span> </span><span style=' font-family: monospace;'>false</span><span>).</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S11'><span style="white-space: pre"><span >onlyUnmapped = false;</span></span></div></div></div><div  class = 'S9'><span>Now, let's obtain the atom map using</span><span> </span><span style=' font-family: monospace;'>obtainAtomMappingsRDT</span><span>: </span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">if </span><span >oBabelInstalled</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    atomMappingReport = obtainAtomMappingsRDT(model, molFileDir, rxnDir, rxnsToAM, hMapping, onlyUnmapped);</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    imagesFolder = [rxnDir filesep </span><span style="color: rgb(170, 4, 249);">'images' </span><span >filesep];</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    atomMapDir = [rxnDir filesep </span><span style="color: rgb(170, 4, 249);">'atomMapped'</span><span >];</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">else</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    imagesFolder = [expectedResults filesep modelName </span><span style="color: rgb(170, 4, 249);">'_chemoinformatics' </span><span >filesep </span><span style="color: rgb(170, 4, 249);">'rxns' </span><span >filesep </span><span style="color: rgb(170, 4, 249);">'images' </span><span >filesep];</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    atomMapDir = [expectedResults filesep modelName </span><span style="color: rgb(170, 4, 249);">'_chemoinformatics' </span><span >filesep </span><span style="color: rgb(170, 4, 249);">'rxns' </span><span >filesep </span><span style="color: rgb(170, 4, 249);">'atomMapped'</span><span >];</span></span></div></div><div class="inlineWrapper"><div  class = 'S8'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div></div></div><div  class = 'S9'><span>The output, </span><span style=' font-family: monospace;'>atomMappingReport,</span><span> contains a report of the reactions written which include:</span></div><ul  class = 'S12'><li  class = 'S13'><span style=' font-family: monospace;'>rxnFilesWritten</span><span>: The MDL RXN written.</span></li><li  class = 'S13'><span style=' font-family: monospace;'>balanced</span><span>: The atomically balanced reactions.</span></li><li  class = 'S13'><span style=' font-family: monospace;'>unbalanced</span><span>: The atomically unbalanced reactions.</span></li><li  class = 'S13'><span>mapped: The atom mapped reactions.</span></li><li  class = 'S13'><span style=' font-family: monospace;'>notMapped:</span><span> The unmapped reactions.</span></li><li  class = 'S13'><span style=' font-family: monospace;'>inconsistentBool</span><span>: A Boolean vector indicating the inconsistent reactions.</span></li><li  class = 'S13'><span style=' font-family: monospace;'>rinchi</span><span>: The reaction InChI for the MDL RXN files written.</span></li><li  class = 'S13'><span style=' font-family: monospace;'>rsmi</span><span>: The reaction SMILES for the MDL RXN files written.</span></li></ul><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre"><span >figure</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">for </span><span >i = 1:length(rxnsToAM)</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    subplot(1, 1/numel(rxnsToAM), i)</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    imshow([imagesFolder rxnsToAM{i} </span><span style="color: rgb(170, 4, 249);">'.png'</span><span >])</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    title(rxnsToAM{i})</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S14'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div><div  class = 'S15'><div class="inlineElement eoOutputWrapper embeddedOutputsFigure" uid="2D968160" data-testid="output_4" style="width: 450px;"><div class="figureElement"><img class="figureImage figureContainingNode" src="" style="width: 670px;"></div></div></div></div></div><h3  class = 'S10'><span>Read atom mapping data</span></h3><div  class = 'S2'><span>The information of an atom mapped reaction is extracted using the function </span><span style=' font-family: monospace;'>readAtomMappingFromRxnFile</span><span>, which includes a metabolite identifier, the element, the atom mapping index, the identification of substrate or product, and a vector indicating which instance of a repeated metabolite atom I belongs to. The atom mapped data for the reaction enolase is extracted in the following example.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre"><span >[mets, elements, metNrs, rxnNrs, isSubstrate, instances] = readAtomMappingFromRxnFile(rxnsToAM{1}, atomMapDir);</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S14'><span style="white-space: pre"><span >display(table(mets, elements, metNrs, rxnNrs, isSubstrate, instances))</span></span></div><div  class = 'S15'><div class="inlineElement eoOutputWrapper embeddedOutputsTextElement scrollableOutput" uid="0329B005" data-testid="output_5" data-width="420" data-height="465" data-hashorizontaloverflow="true" style="width: 450px; max-height: 476px; white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="textElement" style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">  28×6 table

         <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">mets</strong>         <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">elements</strong>    <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">metNrs</strong>    <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">rxnNrs</strong>    <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">isSubstrate</strong>    <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">instances</strong>
    <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">______________</strong>    <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">________</strong>    <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">______</strong>    <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">______</strong>    <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">___________</strong>    <strong style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">_________</strong>

    {'34dhphe[c]'}     {'N'}         1         1         true            1    
    {'34dhphe[c]'}     {'C'}         2         2         true            1    
    {'34dhphe[c]'}     {'C'}         3         3         true            1    
    {'34dhphe[c]'}     {'C'}         4         4         true            1    
    {'34dhphe[c]'}     {'C'}         5         5         true            1    
    {'34dhphe[c]'}     {'C'}         6         6         true            1    
    {'34dhphe[c]'}     {'O'}         7         7         true            1    
    {'34dhphe[c]'}     {'C'}         8         8         true            1    
    {'34dhphe[c]'}     {'O'}         9         9         true            1    
    {'34dhphe[c]'}     {'C'}        10        10         true            1    
    {'34dhphe[c]'}     {'C'}        11        11         true            1    
    {'34dhphe[c]'}     {'C'}        12        12         true            1    
    {'34dhphe[c]'}     {'O'}        13        13         true            1    
    {'34dhphe[c]'}     {'O'}        14        14         true            1    
    {'dopa[c]'   }     {'N'}         1         1         false           1    
    {'dopa[c]'   }     {'C'}         2         2         false           1    
    {'dopa[c]'   }     {'C'}         3         3         false           1    
    {'dopa[c]'   }     {'C'}         4         4         false           1    
    {'dopa[c]'   }     {'C'}         5         5         false           1    
    {'dopa[c]'   }     {'C'}         6         6         false           1    
    {'dopa[c]'   }     {'O'}         7         7         false           1    
    {'dopa[c]'   }     {'C'}         8         8         false           1    
    {'dopa[c]'   }     {'O'}         9         9         false           1    
    {'dopa[c]'   }     {'C'}        10        10         false           1    
    {'dopa[c]'   }     {'C'}        11        11         false           1    
    {'co2[c]'    }     {'O'}         1        14         false           1    
    {'co2[c]'    }     {'C'}         2        12         false           1    
    {'co2[c]'    }     {'O'}         3        13         false           1    </div></div></div></div></div><h3  class = 'S10'><span>Find the enthalpy change and number of bonds broken and formed</span></h3><div  class = 'S2'><span>The </span><span style=' font-family: monospace;'>findEnthalpyChange</span><span> and </span><span style=' font-family: monospace;'>findBondsBrokenAndFormed</span><span> functions are used to calculate the enthalpy change or the number of broken and formed bonds of each reaction in list </span><span style=' font-family: monospace;'>rxnsToAM</span><span> using the reaction mechanism identified by the atom mapping. Furthermore, the total weight of all substrates is calculated by adding the atomic weight of each atom.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre"><span >[enthalpyChange, substrateMass] = findEnthalpyChange(model, rxnsToAM, atomMapDir);</span></span></div></div><div class="inlineWrapper"><div  class = 'S8'><span style="white-space: pre"><span >[bondsBrokenAndFormed, ~] = findBondsBrokenAndFormed(model, rxnsToAM, atomMapDir);</span></span></div></div></div><div  class = 'S9'><span>Make a table of enthalpy change, bonds broken and formed, and sort it by modified bonds.</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre"><span >rxnDataTable = table(rxnsToAM, bondsBrokenAndFormed, enthalpyChange, substrateMass, </span><span style="color: rgb(14, 0, 255);">...</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    </span><span style="color: rgb(170, 4, 249);">'VariableNames'</span><span >, {</span><span style="color: rgb(170, 4, 249);">'rxns'</span><span >,</span><span style="color: rgb(170, 4, 249);">'bondsBrokenAndFormed'</span><span >, </span><span style="color: rgb(170, 4, 249);">'enthalpyChange'</span><span >, </span><span style="color: rgb(170, 4, 249);">'substrateMass'</span><span >});</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >rxnDataTable = sortrows(rxnDataTable, {</span><span style="color: rgb(170, 4, 249);">'bondsBrokenAndFormed'</span><span >}, {</span><span style="color: rgb(170, 4, 249);">'descend'</span><span >});</span></span></div></div><div class="inlineWrapper outputs"><div  class = 'S14'><span style="white-space: pre"><span >display(rxnDataTable)</span></span></div><div  class = 'S15'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableTableElement" uid="DA8AD84E" data-testid="output_6" style="width: 450px;"><div class="ClientDocument veSpecifier table" id="variableeditor_client_Document_2" widgetid="variableeditor_client_Document_2" tabindex="0"><div class="summaryBar" style="font-size: 12px; font-family: Consolas, Inconsolata, Menlo, monospace;"><span>rxnDataTable = </span><span style="color: rgb(179, 179, 179); font-style: normal;">1×4 table </span></div><div id="variableeditor_TableViewModel_2" widgetid="variableeditor_TableViewModel_2" class="table ClientViewDiv hasSummaryBar" data-viewid="__1"><table cellspacing="0" style="border-spacing: 0px; border-width: 0px 1px 0px 0px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><thead><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>&nbsp;</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>rxns</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 186px; min-width: 186px; max-width: 186px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>bondsBrokenAndFormed</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 142px; min-width: 142px; max-width: 142px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>enthalpyChange</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 135px; min-width: 135px; max-width: 135px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>substrateMass</span></th></tr></thead><tbody><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>1</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>'R3'</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 186px; min-width: 186px; max-width: 186px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>2</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 142px; min-width: 142px; max-width: 142px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>-95</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 135px; min-width: 135px; max-width: 135px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>186.1033</span></td></tr></tbody></table></div></div></div></div></div><div class="inlineWrapper"><div  class = 'S16'><span style="white-space: pre"><span >clearvars </span><span style="color: rgb(170, 4, 249);">-except model resultsDir modelName standardisedDir standardisationApproach oBabelInstalled cxcalcInstalled expectedResults</span></span></div></div></div><h2  class = 'S4'><span>Chemoinformatic database</span></h2><div  class = 'S2'><span>The function</span><span> </span><span style=' font-family: monospace;'>generateChemicalDatabase</span><span> generates a chemoinformatic database of standardised metabolite structures and atom-mapped reactions on a genome-scale metabolic reconstruction using the tools described in this tutorial. In order to identify the metabolite structure that most closely resembles the metabolite in the genome-scale reconstruction, identifiers from different sources are compared based on their InChI (See Table 1). Finally, the obtained atom mapped reactions are used to identify the number of broken and formed bonds, as well as the enthalpy change of the reactions in the genome-scale reconstruction.</span></div><div  class = 'S5'><img class = "imageNode" src = "" width = "778" height = "282" alt = "" style = "vertical-align: baseline"></img></div><div  class = 'S5'><span>Figure 2. </span><span style=' font-family: monospace;'>generateChemicalDatabase</span><span> workflow</span></div><div  class = 'S5'><span>Table 1. InChI scoring criteria.</span></div><div  class = 'S5'><img class = "imageNode" src = "" width = "616" height = "246" alt = "" style = "vertical-align: baseline"></img></div><div  class = 'S2'><span>The goal of the comparison is to obtain a larger number of atomically balanced metabolic reactions. The Reaction Decoder Tool algorithm</span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;inline&quot;&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;8&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-5px"><img src="" width="11" height="19" /></span><span> </span><span>(</span><span style=' font-weight: bold;'>RDT</span><span>) is used to obtain the atom mappings of each metabolic reaction. The atom mapping data is used to calculate the number of bonds formed or broken in a metabolic reaction, as well as the enthalpy change. The information gathered is incorporated into the COBRA model.</span></div><div  class = 'S2'><span>We will obtain chemoinformatic database of the Ecoli core model in this tutorial. </span></div><div  class = 'S2'><span>The user-defined parameters in the function</span><span> </span><span style=' font-family: monospace;'>generateChemicalDatabase</span><span> will activate various processes. Each parameter is contained in the struct array </span><span> </span><span style=' font-family: monospace;'>options</span><span> and described in detail below:</span></div><ul  class = 'S12'><li  class = 'S13'><span style=' font-weight: bold;'>outputDir</span><span>: The path to the directory containing the chemoinformatic database (default: current directory)</span></li><li  class = 'S13'><span style=' font-weight: bold;'>printlevel</span><span>: Verbose level </span></li><li  class = 'S13'><span style=' font-weight: bold;'>standardisationApproach</span><span>: String containing the type of standardisation for the molecules (default: 'explicitH' if openBabel</span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;inline&quot;&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;9&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-5px"><img src="" width="11" height="19" /></span><span> is installed, otherwise default: 'basic'):</span></li></ul><ol  class = 'S12'><li  class = 'S13'><span>explicitH: Chemical graphs; </span></li><li  class = 'S13'><span>implicitH: Hydrogen suppressed chemical graph; </span></li><li  class = 'S13'><span>basic: Update the header. </span></li></ol><ul  class = 'S12'><li  class = 'S13'><span style=' font-weight: bold;'>keepMolComparison</span><span>: Logical value, indicate if all metabolite structures per source will be saved or not.</span></li><li  class = 'S13'><span style=' font-weight: bold;'>onlyUnmapped</span><span>: Logic value to select create only unmapped MDL RXN files (default: FALSE, requires Java to run the RDT</span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;inline&quot;&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;11&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-5px"><img src="" width="16" height="19" /></span><span>). </span></li><li  class = 'S13'><span style=' font-weight: bold;'>adjustToModelpH</span><span>: Logic value used to determine whether a molecule's pH must be adjusted in accordance with the COBRA model. (default: TRUE, requires MarvinSuite</span><span mathmlencoding="&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;inline&quot;&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mrow&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;10&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/math&gt;" style="vertical-align:-5px"><img src="" width="16" height="19" /></span><span>). </span></li><li  class = 'S13'><span style=' font-weight: bold;'>addDirsToCompare</span><span>: Cell(s) with the path to directory to an existing database (default: empty).</span></li><li  class = 'S13'><span style=' font-weight: bold;'>dirNames</span><span>: Cell(s) with the name of the directory(ies) (default: empty).</span></li><li  class = 'S13'><span style=' font-weight: bold;'>debug</span><span>: Logical value used to determine whether or not the results of different points in the function will be saved for debugging (default: empty).</span></li></ul><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre"><span >options.outputDir = [resultsDir </span><span style="color: rgb(170, 4, 249);">'database'</span><span >];</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >options.printlevel = 1;</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >options.debug = true;</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >options.standardisationApproach = standardisationApproach;</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >options.adjustToModelpH = true;</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >options.keepMolComparison = false;</span></span></div></div><div class="inlineWrapper"><div  class = 'S8'><span style="white-space: pre"><span >options.onlyUnmapped = false;</span></span></div></div></div><div  class = 'S9'><span>Use the function </span><span style=' font-family: monospace;'>generateChemicalDatabase</span></div><div class="CodeBlock"><div class="inlineWrapper"><div  class = 'S6'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">if </span><span >oBabelInstalled &amp;&amp; cxcalcInstalled</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    info = generateChemicalDatabase(model, options);</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    metDir = [options.outputDir filesep </span><span style="color: rgb(170, 4, 249);">'mets' </span><span >filesep </span><span style="color: rgb(170, 4, 249);">'molFiles'</span><span >];</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">else</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    load([expectedResults filesep modelName </span><span style="color: rgb(170, 4, 249);">'_chemoinformatics' </span><span >filesep </span><span style="color: rgb(170, 4, 249);">'database' </span><span >filesep </span><span style="color: rgb(170, 4, 249);">'7.debug_endOfGenerateChemicalDatabase.mat'</span><span >]);</span></span></div></div><div class="inlineWrapper"><div  class = 'S7'><span style="white-space: pre"><span >    metDir = [expectedResults filesep modelName </span><span style="color: rgb(170, 4, 249);">'_chemoinformatics' </span><span >filesep </span><span style="color: rgb(170, 4, 249);">'database' </span><span >filesep </span><span style="color: rgb(170, 4, 249);">'mets' </span><span >filesep </span><span style="color: rgb(170, 4, 249);">'molFiles'</span><span >];</span></span></div></div><div class="inlineWrapper"><div  class = 'S8'><span style="white-space: pre"><span style="color: rgb(14, 0, 255);">end</span></span></div></div></div><div  class = 'S9'><span>Finally, the function </span><span style=' font-family: monospace;'>metDatabaseStatus</span><span> is used to check the  consistency of the metabolites in a database in relation to a COBRA model, as well as, showing the type of identifiers in the model.</span></div><div class="CodeBlock"><div class="inlineWrapper outputs"><div  class = 'S17'><span style="white-space: pre"><span >[summary, status] = metDatabaseStatus(model, metDir)</span></span></div><div  class = 'S15'><div class="inlineElement eoOutputWrapper embeddedOutputsVariableStringElement" uid="A5D525D7" data-testid="output_7" data-width="420" data-height="188" data-hashorizontaloverflow="false" style="width: 450px; max-height: 261px; white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div class="textElement" style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><div style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;"><span class="variableNameElement" style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">summary = <span class="headerElement" style="white-space: pre; font-style: italic; color: rgb(179, 179, 179); font-size: 12px;">struct with fields:</span></span></div><div style="white-space: pre; font-style: normal; color: rgb(64, 64, 64); font-size: 12px;">                            mets: 10
                      consistent: 2
             inconsistentFormula: 0
              inconsistentCharge: 8
    inconsistentChargeAndFormula: 0
                         missing: 0
                        inchiIds: 10
                       smilesIds: 10
                        chebiIds: 9
                         hmdbIds: 10
                         keggIds: 10
                      pubchemIds: 10
</div></div></div><div class="inlineElement eoOutputWrapper embeddedOutputsVariableTableElement" uid="2A7B873C" data-testid="output_8" style="width: 450px;"><div class="ClientDocument veSpecifier table constrictHeight" id="variableeditor_client_Document_3" widgetid="variableeditor_client_Document_3" tabindex="0"><div class="summaryBar" style="font-size: 12px; font-family: Consolas, Inconsolata, Menlo, monospace;"><span>status = </span><span style="color: rgb(179, 179, 179); font-style: normal;">10×13 table </span></div><div id="variableeditor_TableViewModel_3" widgetid="variableeditor_TableViewModel_3" class="table ClientViewDiv hasSummaryBar" data-viewid="__1"><table cellspacing="0" style="border-spacing: 0px; border-width: 0px 1px 0px 0px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><thead><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>&nbsp;</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>met</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>status</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 90px; min-width: 90px; max-width: 90px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>noOfIds</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 127px; min-width: 127px; max-width: 127px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>modelFormula</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 157px; min-width: 157px; max-width: 157px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>structureFormula</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>modelCharge</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 149px; min-width: 149px; max-width: 149px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>structureCharge</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>inchiBool</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 112px; min-width: 112px; max-width: 112px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>smilesBool</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>chebiBool</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>hmdbBool</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>pubchemBool</span></th><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 1px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>keggBool</span></th></tr></thead><tbody><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>1</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"34dhphe"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"inconsistentCharge"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 90px; min-width: 90px; max-width: 90px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>6</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 127px; min-width: 127px; max-width: 127px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"C9H11NO4"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 157px; min-width: 157px; max-width: 157px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"C9NO4"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 149px; min-width: 149px; max-width: 149px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 112px; min-width: 112px; max-width: 112px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>2</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"co2"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"consistent"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 90px; min-width: 90px; max-width: 90px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>6</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 127px; min-width: 127px; max-width: 127px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"CO2"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 157px; min-width: 157px; max-width: 157px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"CO2"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 149px; min-width: 149px; max-width: 149px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 112px; min-width: 112px; max-width: 112px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>3</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"dhbpt"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"inconsistentCharge"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 90px; min-width: 90px; max-width: 90px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>5</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 127px; min-width: 127px; max-width: 127px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"C9H13N5O3"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 157px; min-width: 157px; max-width: 157px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"C9N5O3"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 149px; min-width: 149px; max-width: 149px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 112px; min-width: 112px; max-width: 112px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>4</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"dopa"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"inconsistentCharge"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 90px; min-width: 90px; max-width: 90px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>6</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 127px; min-width: 127px; max-width: 127px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"C8H12NO2"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 157px; min-width: 157px; max-width: 157px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"C8NO2"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 149px; min-width: 149px; max-width: 149px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 112px; min-width: 112px; max-width: 112px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>5</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"for"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"inconsistentCharge"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 90px; min-width: 90px; max-width: 90px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>6</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 127px; min-width: 127px; max-width: 127px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"CHO2"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 157px; min-width: 157px; max-width: 157px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"CO2"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>-1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 149px; min-width: 149px; max-width: 149px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>-1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 112px; min-width: 112px; max-width: 112px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>6</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"h2o"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"inconsistentCharge"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 90px; min-width: 90px; max-width: 90px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>6</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 127px; min-width: 127px; max-width: 127px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"H2O"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 157px; min-width: 157px; max-width: 157px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"O"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 149px; min-width: 149px; max-width: 149px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 112px; min-width: 112px; max-width: 112px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>7</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"o2"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"consistent"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 90px; min-width: 90px; max-width: 90px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>6</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 127px; min-width: 127px; max-width: 127px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"O2"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 157px; min-width: 157px; max-width: 157px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"O2"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 149px; min-width: 149px; max-width: 149px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 112px; min-width: 112px; max-width: 112px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>8</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"phe_L"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"inconsistentCharge"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 90px; min-width: 90px; max-width: 90px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>6</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 127px; min-width: 127px; max-width: 127px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"C9H11NO2"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 157px; min-width: 157px; max-width: 157px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"C9NO2"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 149px; min-width: 149px; max-width: 149px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 112px; min-width: 112px; max-width: 112px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>9</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"thbpt"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"inconsistentCharge"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 90px; min-width: 90px; max-width: 90px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>6</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 127px; min-width: 127px; max-width: 127px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"C9H15N5O3"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 157px; min-width: 157px; max-width: 157px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"C9N5O3"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 149px; min-width: 149px; max-width: 149px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 112px; min-width: 112px; max-width: 112px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td></tr><tr><th style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 9px; overflow: hidden; width: 34px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial; background: rgb(245, 245, 245); color: rgb(128, 128, 128); padding: 3px;"><span>10</span></th><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 75px; min-width: 75px; max-width: 75px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"tyr_L"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 83px; min-width: 83px; max-width: 83px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"inconsistentCharge"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 90px; min-width: 90px; max-width: 90px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>6</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 127px; min-width: 127px; max-width: 127px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"C9H11NO3"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 157px; min-width: 157px; max-width: 157px; text-align: left; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>"C9NO3"</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 149px; min-width: 149px; max-width: 149px; text-align: right; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>0</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 112px; min-width: 112px; max-width: 112px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 105px; min-width: 105px; max-width: 105px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 120px; min-width: 120px; max-width: 120px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td><td style="text-overflow: ellipsis; font-family: Arial, sans-serif; font-size: 12px; overflow: hidden; width: 98px; min-width: 98px; max-width: 98px; text-align: center; border-width: 0px 0px 1px 1px; border-style: solid; border-color: rgb(191, 191, 191); border-image: initial;"><span>1</span></td></tr></tbody></table></div></div></div></div></div></div><h2  class = 'S4'><span>Bibliography</span></h2><ol  class = 'S12'><li  class = 'S13'><span>Dalby et al., "Description of several chemical structure file formats used by computer programs developed at molecular design limited",</span><span> </span><span style=' font-weight: bold;'>(2002).</span></li><li  class = 'S13'><span>Anderson et al., "Smiles: A line notation and computerized interpreter for chemical structures",</span><span> </span><span style=' font-style: italic;'>Environmental research Brief</span><span> </span><span style=' font-weight: bold;'>(1987)</span><span>.</span></li><li  class = 'S13'><span>Helle et al., "Inchi, the iupac international chemical identifier",</span><span> </span><span style=' font-style: italic;'>Journal of Cheminformatics</span><span> </span><span style=' font-weight: bold;'>(2015)</span><span>.</span></li><li  class = 'S13'><span>Noronha et al., "The Virtual Metabolic Human database: integrating human and gut microbiome metabolism with nutrition and disease",</span><span> </span><span style=' font-style: italic;'>Nucleic acids research</span><span> </span><span> </span><span style=' font-weight: bold;'>(2018).</span></li><li  class = 'S13'><span>Wishart et al., "HMDB 4.0 — The Human Metabolome Database for 2018_"._</span><span> </span><span style=' font-style: italic;'>Nucleic acids research</span><span> </span><span style=' font-weight: bold;'>(2018).</span></li><li  class = 'S13'><span>Sunghwan et al. “PubChem in 2021: new data content and improved web interfaces.” </span><span> </span><span style=' font-style: italic;'>Nucleic acids research</span><span> </span><span style=' font-weight: bold;'>(2021).</span></li><li  class = 'S13'><span>Kanehisa, and Goto. "KEGG: Kyoto Encyclopedia of Genes and Genomes".</span><span> </span><span style=' font-style: italic;'>Nucleic acids research</span><span> </span><span style=' font-weight: bold;'>(2000).</span></li><li  class = 'S13'><span>Hastings et al,. "ChEBI in 2016: Improved services and an expanding collection of metabolites".</span><span> </span><span style=' font-style: italic;'>Nucleic acids research</span><span> </span><span style=' font-weight: bold;'>(2016).</span></li><li  class = 'S13'><span>O'Boyle et al,. "Open Babel: An open chemical toolbox."</span><span> </span><span style=' font-style: italic;'>Journal of Cheminformatics</span><span> </span><span> </span><span style=' font-weight: bold;'>(2011).</span></li><li  class = 'S13'><span>"Marvin was used for drawing, displaying and characterizing chemical structures, substructures and reactions, ChemAxon </span><span>(</span><a href = "http://www.chemaxon.com/"><span>&lt;http://www.chemaxon.com</span></a><span>&gt;)"</span></li><li  class = 'S13'><span>Rahman et al,. "Reaction Decoder Tool (RDT): Extracting Features from Chemical Reactions", Bioinformatics</span><span> </span><span style=' font-weight: bold;'>(2016).</span></li><li  class = 'S13'><span>Preciat et al., "Comparative evaluation of atom mapping algorithms for balanced metabolic reactions: application to Recon3d",</span><span> </span><span style=' font-style: italic;'>Journal of Cheminformatics</span><span> </span><span style=' font-weight: bold;'>(2017)</span><span>.</span></li></ol>
<br>
<!-- 
##### SOURCE BEGIN #####
%% Atomically resolve a metabolic reconstruction
%% Author: German Preciat, Analytical BioSciences, Leiden University
%% INTRODUCTION
% Genome-scale metabolic network reconstructions have become a relevant tool 
% in modern biology to study the metabolic pathways of biological systems _in 
% silico_. However, a more detailed representation at the underlying level of 
% atom mappings opens the possibility for a broader range of biological, biomedical 
% and biotechnological applications than with stoichiometry alone.
% 
% This tutorial will demonstrate how to use the chimoinformatic tools in the 
% COBRA Toolbox. The tutorial is divided into three sections: first, the chimoinformatic 
% data of the metabolites in a COBRA model is processed generating metabolite 
% structures in various chemoinfomatic formats; second, the atoms of their reactions 
% are mapped; and finally, all of the tools demonstrated are used to generate 
% a standardized chemoinformatic database specific to the COBRA model. The chemoinformatic 
% database will be generated using information from the ecoliCore model.
%% MATERIALS
% Open Babel
% To convert molecular structures, open babel must be installed. To install 
% it, follow the steps below.
% 
% On Windows, download the <https://github.com/openbabel/openbabel/releases/download/openbabel-3-1-1/OpenBabel-3.1.1.exe 
% OpenBabel> installation and follow the instructions.
% 
% On _macOS_, run the following command in the Terminal:
% 
% |$ brew install open-babel|
% CXCALC
% The CXCALC tools are used to adjust the pH and create images of the metabolic 
% structures. To install CXCALC download <https://chemaxon.com/products/marvin/download 
% MarvinSuite> and follow the instructions.
% JAVA
% To atom map reactions it is required to have Java version 8. Follow the instruction 
% in <https://www.openlogic.com/openjdk-downloads https://www.openlogic.com/openjdk-downloads>. 
% 
% On _macOS_, please make sure that you run the following commands in the Terminal 
% before continuing with this tutorial:
% 
% |$ /usr/bin/ruby -e "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/master/install 
% |https://raw.githubusercontent.com/Homebrew/install/master/install|>|)"|
% 
% |$ brew install coreutils|
% |PATH|
% |On _Linux_|, please make sure that Java, OpenBabel and CXCALC directories 
% are included. To do this, run the following commands:
% 
% |$ export PATH=$PATH:/usr/local/bin| (default location of OpenBabel)
% 
% |$ export PATH=$PATH:/opt/opt/chemaxon/jchemsuite/bin/| (default location 
% of CXCALC)
% 
% |$ export PATH=$PATH:/usr/java/jre1.8.0_131/bin/| (default installation of 
% Java)
% 
% |On Windows|:
% 
% |$ set path=%path%;C:\Program Files (x86)\OpenBabel-3.1.1| (default location 
% of OpenBabel)
% 
% |$ set path=%path%;C:\Program Files\ChemAxon\MarvinSuite\bin| (default location 
% of CXCALC)
% 
% Also, in order to standardise the chemical reaction format, it is required 
% to have CXCALC with its respective license.
%% Metabolites
% Metabolite structures are represented in a variety of chemoinformatic formats, 
% including 1) Metabolite chemical tables (MDL MOL) that list all of the atoms 
% in a molecule, as well as their coordinates and bonds${\;}^1$; 2) The simplified 
% molecular-input line-entry system (SMILES), which uses a string of ASCII characters 
% to describe the structure of a molecule${\;}^2$; or 3) The International Chemical 
% Identifier (InChI) developed by the IUPAC, provides a standard representation 
% for encoding molecular structures using multiple layers to describe a metabolite 
% structure${\;}^3$ (see Figure 1). Additionally, different chemical databases 
% assing a particular identifier to represent the metabolite structures as the 
% Virtual Metabolic Human database (*VMH*)${\;}^4$, the Human Metabolome Database 
% (*HMDB*)${\;}^5$, *PubChem* database${\;}^6$, the Kyoto Encyclopedia of Genes 
% and Genomes(*KEEG*)${\;}^7$, and the Chemical Entities of Biological Interest 
% (*ChEBI*)${\;}^8$. 
% 
% 
% 
% Figure 1. L-alaninate molecule represented by a hydrogen-suppressed molecular 
% graph (implicit hydrogens). The main branch of the molecule can be seen in green; 
% the additional branches can be seen in brown, pink and turquoise. The stereochemistry 
% of the molecule is highlighted in blue, the double bond with dark green and 
% the charges are highlighted in light brown. The same colours are used to indicate 
% where this information is represented in the different chemoinformatic formats. 
% The InChI is divided into layers, each of which begins with a lowercase letter, 
% except for Layers 1 and 2. Layer 1 indicates if the InChI is standardised, Layer 
% 2 the chemical formula in a neutral state, Layer 3 the connectivity between 
% the atoms (ignoring hydrogen atoms), Layer 4 the connectivity of hydrogen atoms, 
% Layer 5 the charge of the molecule and Layer 6 the stereochemistry. Additional 
% layers can be added, but they cannot be represented with a standard InChI.
% 
% First we clean the workspace and define the model that will be used for conserved 
% moiety decomposition.

clear
%modelName = 'ecoli';
modelName = 'DAS';
%% 
% Setup the paths and load the model.

projectDir = strrep(which('tutorial_atomicallyResolveReconstruction'),'/tutorial_atomicallyResolveReconstruction.mlx','');
resultsDir = [projectDir filesep 'results' filesep modelName '_chemoinformatics' filesep];
switch modelName
    case 'DAS'
        tutorialdir = fileparts(which('tutorial_atomicallyResolveReconstruction.mlx'));
        model = readCbModel([tutorialdir filesep 'data' filesep 'subDas.mat']); 
    case 'ecoli'
        load ecoli_core_model.mat
        model.mets = regexprep(model.mets, '\-', '\_');
end
%% 
% Check Open Babel and CXCALC installation

[oBabelInstalled, ~] = system('obabel');
if oBabelInstalled == 127
    oBabelInstalled = 0;
end
[cxcalcInstalled, ~] = system('cxcalc');
cxcalcInstalled = ~cxcalcInstalled;
% Add metabolite information
% The |addMetInfoInCBmodel| function will be used to add the identifiers. The 
% chemoinformatic data is obtained from an external file and is added to the ecoliCore 
% model. The chemoinformatic information includes SMILES, InChIs, or different 
% database identifiers.

dataFile = which('tutorial_atomicallyResolveReconstruction.mlx');
inputData = regexprep(dataFile, 'tutorial_atomicallyResolveReconstruction.mlx', 'metaboliteIds.xlsx');
expectedResults = regexprep(dataFile, 'tutorial_atomicallyResolveReconstruction.mlx', 'expectedResults');
replace = false;
[model, hasEffect] = addMetInfoInCBmodel(model, inputData, replace);
% Download metabolites from model identifiers
% The |obtainMetStructures| function is used to obtain MDL MOL files from different 
% databases, including HMDB${\;}^5$, PubChem${\;}^6$, KEEG${\;}^7$ and ChEBI${\;}^8$. 
% Alternatively, the function can be used to convert the InChI strings or SMILES 
% in the model to MDL MOL files. A COBRA model with identifiers is required to 
% run the function.
% 
% The optional variables are:
% 
% The variable |mets| contains a list of metabolites to be download (Default: 
% All). To obtain the metabolite structure of glucose, we use the VMH id.

switch modelName
    case 'DAS'
        mets = {'34dhphe'; 'dopa'; 'co2'};
    case 'ecoli'
        mets = {'2pg'; 'h2o'; 'pep'; 'fdp'; 'f6p'; 'pi'};
end
%% 
% |outputDir|: Path to the directory that will contain the MOL files (default: 
% current directory).

outputDir = resultsDir;
%% 
% |sources|, is an array indicating the source of preference (default: all the 
% sources with ID)
%% 
% # InChI (requires openBabel)
% # Smiles (requires openBabel)
% # KEGG (<https://www.genome.jp/ https://www.genome.jp/>)
% # HMDB (<https://hmdb.ca/ https://hmdb.ca/>)
% # PubChem (<https://pubchem.ncbi.nlm.nih.gov/ https://pubchem.ncbi.nlm.nih.gov/>)
% # CHEBI (<https://www.ebi.ac.uk/ https://www.ebi.ac.uk/>)
% # DrugBank (<https://go.drugbank.com/ https://go.drugbank.com/>)
% # LipidMass (<https://www.lipidmaps.org/ https://www.lipidmaps.org/>)

sources = {'inchi'; 'smiles'; 'kegg'; 'hmdb'; 'pubchem'; 'chebi'};
%% 
% Run the function

if oBabelInstalled
    molCollectionReport = obtainMetStructures(model, mets, outputDir, sources);
else
    load([expectedResults filesep 'molCollectionReport.mat'])
end
disp(molCollectionReport.databaseCoverage)
% Convert metabolites
% Open Babel${\;}^9$ is a chemical toolbox designed to translate the different 
% chemical data languages. It is possible to convert between chemical formats 
% such as MDL MOL files to InChI. This function |openBabelConverter| converts 
% chemoformatic formats using OpenBabel. It requires having OpenBabel installed. 
% 
% The function requires the original chemoinformatic structure (|origFormat|) 
% and the output format (|outputFormat|). The formats supported are SMILES, MD 
% MOL, InChI, InChIKey, rxn and rinchi. Furthermore, if the optional variable 
% |saveFileDir| is set, the new format will be saved with the name specified in 
% the variable.
% 
% All of the downloaded metabolite structures are converted to an InChI as follows.

switch modelName
    case 'DAS'
        met = 'dopa';
    case 'ecoli'
        met = 'f6p';
end
if oBabelInstalled
    [inchis, smiles] = deal(cell(size(mets)));
    for i = 1:length(sources)
        metaboliteDir = [outputDir 'metabolites' filesep sources{i} filesep];
        if isfile([metaboliteDir met '.mol'])
            inchis{i, 1} = openBabelConverter([metaboliteDir met '.mol'], 'inchi');
            smiles{i, 1} = openBabelConverter(inchis{i, 1}, 'smiles');
        end
    end
else
    load([expectedResults filesep 'inchisSmiles.mat'])
end
table(sources, inchis, smiles)
% InChI comparison
% With the function |compareInchis|, each InChI string is given a score based 
% on its similarity to the chemical formula and charge of the metabolite in the 
% model. Factors such as stereochemistry, if it is a standard inchi, and its similarity 
% to the other inchis are also considered. The InChI with the highest score is 
% the identifier considered as more consistent with the model.

comparisonTable = compareInchis(model, inchis, met);
display(comparisonTable)
% Metabolite structure standardisation
% Standardize an MDL MOL file directory by representing the reaction using normal 
% chemical graphs, hydrogen suppressed chemical graphs, and chemical graphs with 
% protonated molecules. The function also updates the header with the standardization 
% information. It makes use of CXCALC and OpenBabel.
% 
% Standardisation
%% 
% # explicitH: Chemical graphs; 
% # implicitH: Hydrogen suppressed chemical graph; 
% # basic: Update the header. 

switch modelName
    case 'DAS'
        standardisationApproach = 'implicitH';
    case 'ecoli'
        standardisationApproach = 'explicitH';
end
if oBabelInstalled
    inchiDir = [outputDir 'metabolites' filesep 'inchi' filesep];
    metList = mets;
    standardisedDir = [outputDir 'mets' filesep];
    standardisationReport = standardiseMolDatabase(inchiDir, metList, ...
        standardisedDir, standardisationApproach);
else
    standardisedDir =[expectedResults filesep modelName '_chemoinformatics' filesep 'mets' filesep];
end
% Metabolite structures

if cxcalcInstalled
    imagesFolder = [standardisedDir 'images' filesep];
else
    imagesFolder = [expectedResults filesep modelName '_chemoinformatics' filesep 'mets' filesep 'images' filesep];
end
figure
for i = 1:length(mets)
    subplot(numel(mets)/3, 3, i)
    imshow([imagesFolder mets{i} '.jpeg'])
    title(mets{i})
end
clearvars -except model resultsDir modelName standardisedDir standardisationApproach oBabelInstalled cxcalcInstalled expectedResults
%% Reactions
% A set of atom mappings represents the mechanism of each chemical reaction 
% in a metabolic network, each of which relates an atom in a substrate metabolite 
% to an atom of the same element in a product metabolite (Figure 1). To atom map 
% reactions in a metabolic network reconstruction, one requires chemical structures 
% in a data file format (SMILES, MDL MOL, InChIs), reaction stoichiometries, and 
% an atom mapping algorithm.
% 
% A set of atom mappings represents the mechanism of each chemical reaction 
% in a metabolic network, each of which relates an atom in a substrate metabolite 
% to an atom of the same element in a product metabolite (Figure 1). To atom map 
% reactions in a metabolic network reconstruction, one requires chemical structures 
% in a data file format (SMILES, MDL MOL and InChIs), reaction stoichiometries, 
% and an atom mapping algorithm.
% 
% 
% 
% Figure 1. Set of atom mappings for reaction L-Cysteine L-Homocysteine-Lyase 
% (VMH ID: r0193).
% 
% Metabolite structures and reaction stoichiometries from the genome-scale reconstruction 
% are used to generate reaction chemical tables containing information about the 
% chemical reactions (MDL RXN). The metabolic reactions are atom mapped using 
% the Reaction Decoder Tool (RDT) algorithm${\;}^{11}$, which was chosen after 
% comparing the performance of published atom mapping algorithms${\;}^{12}$. Atom 
% map metabolic reactions Atom mappings for the internal reactions of a metabolic 
% network reconstruction are performed by the function |obtainAtomMappingsRDT|. 
% 
% For this section, the atom mappings are generated based on the molecular structures 
% obtained and the ecoli core model. 
% 
% The function |obtainAtomMappingsRDT| generates 4 different directories containing: 
%% 
% * the atom mapped reactions in MDL RXN format (directory _atomMapped_), 
% * the images of the atom mapped reactions (directory _images_), 
% * additional data for the atom mapped reactions (SMILES, and product and reactant 
% indexes) (directory _txtData_), and 
% * the unmapped MDL RXN files (directory _rxnFiles_). 
%% 
% The input variable |outputDir| indicates the directory where the folders will 
% be generated (by default the function assigns the current directory).
%% Atom map a reaction
% The main inputs of the |obtainAtomMappingsRDT function| are a COBRA model 
% structure and a directory containing the molecular structures in MDL MOL format. 
% The variable |molFileDir| contains the path to the directory containing MOL 
% files of the COBRA model. 

molFileDir = [standardisedDir 'molFiles' filesep];
%% 
% The variable |rxnDir| specifies the path to the directory containing the RXN 
% files with atom mappings.

rxnDir = [resultsDir 'rxns'];
%% 
% The input variable |rxnsToAM| indicates the reactions that will be atom mapped. 
% By default the function atom map all the internal reactions with all of its 
% metabolites present in the metabolite database (|molFileDir|).

switch modelName
    case 'DAS'
        rxnsToAM = {'R3'};
    case 'ecoli'
        rxnsToAM = {'ENO'; 'FBP'};
end
%% 
% The variable |hMapping|, indicates if the hydrogen atoms will be also atom 
% mapped (Default: |true|).

hMapping = true;
%% 
% Finally, the variable |onlyUnmapped| indicates if only the reaction files 
% will be generated without atom mappings (Default: |false|).

onlyUnmapped = false;
%% 
% Now, let's obtain the atom map using |obtainAtomMappingsRDT|: 

if oBabelInstalled
    atomMappingReport = obtainAtomMappingsRDT(model, molFileDir, rxnDir, rxnsToAM, hMapping, onlyUnmapped);
    imagesFolder = [rxnDir filesep 'images' filesep];
    atomMapDir = [rxnDir filesep 'atomMapped'];
else
    imagesFolder = [expectedResults filesep modelName '_chemoinformatics' filesep 'rxns' filesep 'images' filesep];
    atomMapDir = [expectedResults filesep modelName '_chemoinformatics' filesep 'rxns' filesep 'atomMapped'];
end
%% 
% The output, |atomMappingReport,| contains a report of the reactions written 
% which include:
%% 
% * |rxnFilesWritten|: The MDL RXN written.
% * |balanced|: The atomically balanced reactions.
% * |unbalanced|: The atomically unbalanced reactions.
% * mapped: The atom mapped reactions.
% * |notMapped:| The unmapped reactions.
% * |inconsistentBool|: A Boolean vector indicating the inconsistent reactions.
% * |rinchi|: The reaction InChI for the MDL RXN files written.
% * |rsmi|: The reaction SMILES for the MDL RXN files written.

figure
for i = 1:length(rxnsToAM)
    subplot(1, 1/numel(rxnsToAM), i)
    imshow([imagesFolder rxnsToAM{i} '.png'])
    title(rxnsToAM{i})
end
% Read atom mapping data
% The information of an atom mapped reaction is extracted using the function 
% |readAtomMappingFromRxnFile|, which includes a metabolite identifier, the element, 
% the atom mapping index, the identification of substrate or product, and a vector 
% indicating which instance of a repeated metabolite atom I belongs to. The atom 
% mapped data for the reaction enolase is extracted in the following example.

[mets, elements, metNrs, rxnNrs, isSubstrate, instances] = readAtomMappingFromRxnFile(rxnsToAM{1}, atomMapDir);
display(table(mets, elements, metNrs, rxnNrs, isSubstrate, instances))
% Find the enthalpy change and number of bonds broken and formed
% The |findEnthalpyChange| and |findBondsBrokenAndFormed| functions are used 
% to calculate the enthalpy change or the number of broken and formed bonds of 
% each reaction in list |rxnsToAM| using the reaction mechanism identified by 
% the atom mapping. Furthermore, the total weight of all substrates is calculated 
% by adding the atomic weight of each atom.

[enthalpyChange, substrateMass] = findEnthalpyChange(model, rxnsToAM, atomMapDir);
[bondsBrokenAndFormed, ~] = findBondsBrokenAndFormed(model, rxnsToAM, atomMapDir);
%% 
% Make a table of enthalpy change, bonds broken and formed, and sort it by modified 
% bonds.

rxnDataTable = table(rxnsToAM, bondsBrokenAndFormed, enthalpyChange, substrateMass, ...
    'VariableNames', {'rxns','bondsBrokenAndFormed', 'enthalpyChange', 'substrateMass'});
rxnDataTable = sortrows(rxnDataTable, {'bondsBrokenAndFormed'}, {'descend'});
display(rxnDataTable)
clearvars -except model resultsDir modelName standardisedDir standardisationApproach oBabelInstalled cxcalcInstalled expectedResults
%% Chemoinformatic database
% The function |generateChemicalDatabase| generates a chemoinformatic database 
% of standardised metabolite structures and atom-mapped reactions on a genome-scale 
% metabolic reconstruction using the tools described in this tutorial. In order 
% to identify the metabolite structure that most closely resembles the metabolite 
% in the genome-scale reconstruction, identifiers from different sources are compared 
% based on their InChI (See Table 1). Finally, the obtained atom mapped reactions 
% are used to identify the number of broken and formed bonds, as well as the enthalpy 
% change of the reactions in the genome-scale reconstruction.
% 
% 
% 
% Figure 2. |generateChemicalDatabase| workflow
% 
% Table 1. InChI scoring criteria.
% 
% 
% 
% The goal of the comparison is to obtain a larger number of atomically balanced 
% metabolic reactions. The Reaction Decoder Tool algorithm${\;}^8$ (*RDT*) is 
% used to obtain the atom mappings of each metabolic reaction. The atom mapping 
% data is used to calculate the number of bonds formed or broken in a metabolic 
% reaction, as well as the enthalpy change. The information gathered is incorporated 
% into the COBRA model.
% 
% We will obtain chemoinformatic database of the Ecoli core model in this tutorial. 
% 
% The user-defined parameters in the function |generateChemicalDatabase| will 
% activate various processes. Each parameter is contained in the struct array  
% |options| and described in detail below:
%% 
% * *outputDir*: The path to the directory containing the chemoinformatic database 
% (default: current directory)
% * *printlevel*: Verbose level 
% * *standardisationApproach*: String containing the type of standardisation 
% for the molecules (default: 'explicitH' if openBabel${\;}^9$ is installed, otherwise 
% default: 'basic'):
%% 
% # explicitH: Chemical graphs; 
% # implicitH: Hydrogen suppressed chemical graph; 
% # basic: Update the header. 
%% 
% * *keepMolComparison*: Logical value, indicate if all metabolite structures 
% per source will be saved or not.
% * *onlyUnmapped*: Logic value to select create only unmapped MDL RXN files 
% (default: FALSE, requires Java to run the RDT${\;}^{11}$). 
% * *adjustToModelpH*: Logic value used to determine whether a molecule's pH 
% must be adjusted in accordance with the COBRA model. (default: TRUE, requires 
% MarvinSuite${\;}^{10}$). 
% * *addDirsToCompare*: Cell(s) with the path to directory to an existing database 
% (default: empty).
% * *dirNames*: Cell(s) with the name of the directory(ies) (default: empty).
% * *debug*: Logical value used to determine whether or not the results of different 
% points in the function will be saved for debugging (default: empty).

options.outputDir = [resultsDir 'database'];
options.printlevel = 1;
options.debug = true;
options.standardisationApproach = standardisationApproach;
options.adjustToModelpH = true;
options.keepMolComparison = false;
options.onlyUnmapped = false;
%% 
% Use the function |generateChemicalDatabase|

if oBabelInstalled && cxcalcInstalled
    info = generateChemicalDatabase(model, options);
    metDir = [options.outputDir filesep 'mets' filesep 'molFiles'];
else
    load([expectedResults filesep modelName '_chemoinformatics' filesep 'database' filesep '7.debug_endOfGenerateChemicalDatabase.mat']);
    metDir = [expectedResults filesep modelName '_chemoinformatics' filesep 'database' filesep 'mets' filesep 'molFiles'];
end
%% 
% Finally, the function |metDatabaseStatus| is used to check the  consistency 
% of the metabolites in a database in relation to a COBRA model, as well as, showing 
% the type of identifiers in the model.

[summary, status] = metDatabaseStatus(model, metDir)
%% Bibliography
%% 
% # Dalby et al., "Description of several chemical structure file formats used 
% by computer programs developed at molecular design limited", *(2002).*
% # Anderson et al., "Smiles: A line notation and computerized interpreter for 
% chemical structures", _Environmental research Brief_ *(1987)*.
% # Helle et al., "Inchi, the iupac international chemical identifier", _Journal 
% of Cheminformatics_ *(2015)*.
% # Noronha et al., "The Virtual Metabolic Human database: integrating human 
% and gut microbiome metabolism with nutrition and disease", _Nucleic acids research_  
% *(2018).*
% # Wishart et al., "HMDB 4.0 — The Human Metabolome Database for 2018_"._ _Nucleic 
% acids research_ *(2018).*
% # Sunghwan et al. “PubChem in 2021: new data content and improved web interfaces.”  
% _Nucleic acids research_ *(2021).*
% # Kanehisa, and Goto. "KEGG: Kyoto Encyclopedia of Genes and Genomes". _Nucleic 
% acids research_ *(2000).*
% # Hastings et al,. "ChEBI in 2016: Improved services and an expanding collection 
% of metabolites". _Nucleic acids research_ *(2016).*
% # O'Boyle et al,. "Open Babel: An open chemical toolbox." _Journal of Cheminformatics_  
% *(2011).*
% # "Marvin was used for drawing, displaying and characterizing chemical structures, 
% substructures and reactions, ChemAxon (<http://www.chemaxon.com/ <http://www.chemaxon.com>>)"
% # Rahman et al,. "Reaction Decoder Tool (RDT): Extracting Features from Chemical 
% Reactions", Bioinformatics *(2016).*
% # Preciat et al., "Comparative evaluation of atom mapping algorithms for balanced 
% metabolic reactions: application to Recon3d", _Journal of Cheminformatics_ *(2017)*.
##### SOURCE END #####
-->
</div></body></html>